str1 = "Hello,Python! I love Python programming."
index = str1.find("Python")
if index != -1:
    print("子串'Python'在字符串中的位置是:", index)
    replaced_str = str1.replace("Python", "Java", 2)
    print("替换后的字符串是：", replaced_str)
else:
    print("子串'Python'不在字符串中")

# 创建一个集合，该集合包含0到9之间的所有偶数
even_numbers = set()
for i in range(0, 10):
    if i % 2 == 0:
        even_numbers.add(i)
print(even_numbers)

even_numbers2 = {i for i in range(10) if i % 2 == 0}

# 自己输入一个字符串，然后将其颠倒过来
my_str = input("请输入一个字符串：")
my_list = []
for x in range(len(my_str) - 1, -1, -1):
    my_list.append(my_str[x])
print(''.join(my_list))

# 创建一个包含多个元素（如姓名、年龄、职业）的元组，并使用解包的方式分别将这些元素赋值给不同的变量
# 元组解包，将元组中的值分配给变量。这在处理从函数返回多个值或从数据库查询中检索多个字段时特别有用
person = ('Alice', 30, "Engineer")
name, age, occupation = person
print(f"Name:{name},Age:{age},Occupation:{occupation}")

# 查找元组中的最大值、最小值
numbers = (12, 3, 7, 19, 5, 2, 11)
max_value = max(numbers)
min_value = min(numbers)
print(f"Max:{max_value},Min:{min_value}")

# 编写一个程序，计算两个数的和、差、积和商 + - * /

# 求1-2+3-4+5……99的所有数的和，采用while
i = 1
result = 0
while i <= 99:
    if i % 2 != 0:
        result += i
    else:
        result -= i
    i += 1
print(f"结果为{result}")

# 一万本金，年利息：0.0325，求连本带息多少年能翻倍
count = 0
principal = 10000
interest = 0.0325
total = 20000
while principal <= total:
    count += 1
    principal += principal * interest
    print(f"第{count}年，连本带息总金额：{principal}")
print(f"需要{count}年")

# 小明和妹妹年龄之积是年龄之和的六倍，两人年龄不同且年龄之差不超过8岁，要求求出小明妹妹的年龄
for i in range(1, 100):
    for j in range(1, 100):
        if i * j == 6 * (i + j) and i - j < 8:
            print(i, j)

# 猜年龄：一个数学家的年龄的立方是个4位数，四次方是个六位数，这十个数字正好包含了从0到9这十个数字，每个都恰好出现1次。求这个数学家的年龄
# 年龄的立方是一个四位数，所以年龄必须在10到31之间，因为32*32*32=32768是一个五位数
# 年龄的四次方是一个六位数，这进一步限制了年龄的下限，9的四次方是6561，是一个四位数，所以年龄必须大于9
for i in range(10, 30):
    i3 = str(i ** 3)
    i4 = str(i ** 4)
    if len(i3) == 4 and len(i4) == 6:
        if len(set(i3 + i4)) == 10:
            print(i)
            print(i3 + i4)

# 列表中有很多文件名，要求从这些文件中选出图片文件，即扩展名分别是‘.jpg’,'.gif','.png'的文件
Ls = ['a.jpg', 'b.txt', 'c.jpg', 'd.gif', 'e.php', 'f.asp', 'g.png']

# 定义一个包含图像文件扩展名的元组
image_extensions = ('.jpg', '.gif', '.png')

# 初始化一个空列表来存储图像文件名
# images = [file for file in Ls if file.endswith(image_extensions)]

# 注意：上面的列表推导式实际上不会按预期工作，因为endswith不接受元组直接作为参数
# 使用正确的列表推导式
images = [file for file in Ls if file.endswith(('.jpg', '.gif', '.png'))]

# 打印结果
print(images)

# 使用集合推导式创建一个集合，该集合包含0到9之间的所有偶数
set1 = {i for i in range(10) if i % 2 == 0}
print(set1)


# 找出列表a = ["hello", "world", "yoyo", "congratulations"]中单词最长的一个
def test():
    global longest_word
    list_a = ["hello", "world", "yoyo", "congratulations"]

    longest_length = len(list_a[0])
    for word in list_a:
        if len(word) > longest_length:
            longest_word = word
            longest_length = len(word)
    return longest_word


print(test())

# 把列表a = [1, -6, 2, -5, 9, 4, 20, -3]中的数字按绝对值从小到大排序


def test():
    a = [1, -6, 2, -5, 9, 4, 20, -3]
    lists = []
    for i in a:
        lists.append(abs(i))
    lists.sort()
    return lists


print(test())


# 编写一个函数，交换指定字典的key和value。如：dict1 = {'a': 1, 'b': 2, 'c': 3}
def swap_key_value(input_dict):
    # 使用字典推导式来交换键和值
    # 注意：如果原始字典中有重复的值，则后出现的键会覆盖先出现的键对应的值
    return {value: key for key, value in input_dict.items()}


# 测试函数
dict1 = {'a': 1, 'b': 2, 'c': 3}
swapped_dict = swap_key_value(dict1)
print(swapped_dict)  # 输出: {1: 'a', 2: 'b', 3: 'c'}


def replace_dict(dict1):
    dict2 = {}
    for x in dict1:
        dict2[dict1[x]] = x
    return dict2


dict1 = {'a': 1, 'b': 2, 'c': 3}
dict1 = replace_dict(dict1)
print(dict1)


# 小华读书。第一天读了全本的一半加两页，第二天读了剩下的一半加两页，以后天天如此……，第六天读完了最后的三页，问全书有多少页。
# 初始化第六天开始的页数为3
pages_on_sixth_day = 3

# 从第六天逆向推算到第一天
for day in range(5, 0, -1):  # 从第五天到第一天
    pages_on_day = (pages_on_sixth_day + 2) * 2
    pages_on_sixth_day = pages_on_day

# 第一天开始时的页数就是全书的页数
total_pages = pages_on_sixth_day

print(f"全书共有{total_pages}页。")


def num(n):
    if n > 6:
        return 0
    elif n == 6:
        return 3
    else:
        return (num(n+1)+2)*2


print("全书共{}页".format(num(1)))
result = num(1)
for i in range(1, 7):
    print("第{}天读了{}页，剩余{}页".format(i, result - num(i+1), num(i+1)))
    result = num(i+1)
